package vccibernos;

import java.util.*;
import java.util.Date;
import persistencia.PersistenciaPromocion;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author JAVA
 */
public class GestionPromociones {

    /**
     * Recibe los datos de una promocion, crea un objeto promocion y lo manda a la Persistencia para que lo inserte en la BBDD
     * @param descripcion
     * @param porcentaje
     * @param dias
     * @param fechaInicio
     * @param fechaFin
     * @param tipo
     * @param descripcionTipo 
     */
    public static void addPromocion(String descripcion, float porcentaje, int dias, Date fechaInicio, Date fechaFin, Tipo tipo, String descripcionTipo) {
        try {
            Promocion p = new Promocion(descripcion, porcentaje, dias, fechaInicio, fechaFin, tipo, descripcionTipo);
            if (persistencia.PersistenciaPromocion.insertarPromocion(p) == 1) {
                System.out.println("Promocion insertada correctamente");
            } else {
                System.out.println("La promocion no fue insertada");
            }
        } catch (Exception ex) {
            System.out.println("Error en la introduccion en la BBDD");
        }

    }

    public static void borrarPromocion(int codigo) {
        if (PersistenciaPromocion.bajaPromocion(codigo) == 1) {
            System.out.println("Promocion eliminada correctamente");
        } else {
            System.out.println("Promocion NO eliminada, verifique el id de la promocion");
        }

    }

    /**
     * Llama a la persistencia y recibe una lista con promociones y las muestra por pantalla
     * @return un entero con el numero de promociones existentes
     */
    public static int mostrarPromociones() {
        List<Promocion> prom = PersistenciaPromocion.mostrarPromociones();
        Iterator it = prom.iterator();
        System.out.println("Existen " + prom.size() + " promociones");
        while (it.hasNext()) {
            Promocion p = (Promocion) it.next();
            System.out.println("Numero de promociones: " + prom.size());
            System.out.println("---------------------------");
            System.out.println("Id: " + p.getId());
            System.out.println("Descripcion: " + p.getDescripcion() + " Porcentaje: " + p.getPorcentaje() + " Dias extra: " + p.getDias());
            System.out.println("Fecha de Inicio: " + p.getFechaInicio().toString());
            System.out.println("Fecha de fin: " + p.getFechaFin().toString());
            System.out.println("Tipo: " + p.getT().toString() + " Descripcion: " + p.getDescripcionTipo());
            System.out.println("---------------------------");
        }
        return prom.size();
    }

    public static int mostrarPromocionesVigentes() {
        List<Promocion> prom = PersistenciaPromocion.mostrarPromocionesVigentes();
        Iterator it = prom.iterator();
        System.out.println("Existen " + prom.size() + " promociones");
        while (it.hasNext()) {
            Promocion p = (Promocion) it.next();
            System.out.println("Id: " + p.getId());
            System.out.println("Descripcion: " + p.getDescripcion() + " Porcentaje: " + p.getPorcentaje() + " Dias extra: " + p.getDias());
            System.out.println("Fecha de Inicio: " + p.getFechaInicio().toString());
            System.out.println("Fecha de fin: " + p.getFechaFin().toString());
            System.out.println("Tipo: " + p.getT().toString() + " Descripcion: " + p.getDescripcionTipo());
            System.out.println("---------------------------");
        }
        return prom.size();
    }

    /**
     * Metodo para modificar un atributo de la promocion y establecer su nuevo valor
     * @param nombre del campo a modificar
     * @param valor nuevo a introducir
     * @return 1 si se modifica correctamente
     */
    public static void modificarGenerico(int cod, String nombre, String valor) {
        if (PersistenciaPromocion.modificarCampos(cod, nombre, valor) == 1) {
            System.out.println("Campo modificado correctamente");
        } else {
            System.out.println("Modificacion no realizada");
        }
    }

    public static void modificarFechaFin(int cod, String nombre, Date fecha) {
        if (PersistenciaPromocion.modificarFechaFin(cod, nombre, fecha) == 1) {
            System.out.println("Fecha modificada correctamente");
        } else {
            System.out.println("Modificacion no realizada");
        }
    }

    public static int comprobarPromocionesPelicula(Pelicula pelicula1) {
        int codigo = 0; //Igualamos codigo a 0 para cuando no haya ninguna promocion
        //devolveremos el codigo con el valor igualado a 0, ya que no habra ninguna promocion con
        //ya que NO DEBE HABER ninguna promocion con codigo 0
        Date fechaActual = new Date();
        ArrayList<Promocion> listaPromociones = new ArrayList<Promocion>();


        for (Promocion p : listaPromociones) {

            if (p.getFechaInicio().after(fechaActual)) {

                if (p.esGenero()) {

                    if (p.getDescripcionTipo().compareTo(pelicula1.getGenero()) == 0) {
                        //BUSCAR EN LA BASE DE DATOS EL CODIGO DE LA PROMOCION Y DEVOLVERLO
                        return codigo;
                    }
                }
            }

            if (p.esAño()) {

                int ano = Integer.parseInt(p.getDescripcionTipo());

                if (ano == pelicula1.getAnyo()) {
                    //BUSCAR EN LA BASE DE DATOS EL CODIGO DE LA PROMOCION Y DEVOLVERLO
                    return codigo;
                }
            }

            if (p.esDirector()) {

                if (p.getDescripcionTipo().compareTo(pelicula1.getDirector()) == 0) {
                    //BUSCAR EN LA BASE DE DATOS EL CODIGO DE LA PROMOCION Y DEVOLVERLO
                    return codigo;
                }
            } else {// si no hay ninguna promocion vigente devolvemos el codigo con el valor 0
                return codigo;
            }

        }

        return codigo;   //tengo que poner un return en el caso que no haya entrado en ninguna de las opciones devolvera el valor 0     
    }

    public static int comprobarPromocionesJuego(Juego juego1) {
        int codigo = 0; //Igualamos codigo a 0 para cuando no haya ninguna promocion
        //devolveremos el codigo con el valor igualado a 0, ya que no habra ninguna promocion con
        //ya que NO DEBE HABER ninguna promocion con codigo 0
        Date fechaActual = new Date();
        ArrayList<Promocion> listaPromociones = new ArrayList<Promocion>();


        for (Promocion p : listaPromociones) {

            if (p.getFechaInicio().after(fechaActual)) {

                if (p.esGenero()) {

                    if (p.getDescripcionTipo().compareTo(juego1.getGenero()) == 0) {
                        //BUSCAR EN LA BASE DE DATOS EL CODIGO DE LA PROMOCION Y DEVOLVERLO
                        return codigo;
                    }
                }
            }

            if (p.esSoporte()) {

                if (p.getDescripcionTipo().compareTo(juego1.getSoporte()) == 0) {
                    //BUSCAR EN LA BASE DE DATOS EL CODIGO DE LA PROMOCION Y DEVOLVERLO
                    return codigo;
                }
            } else {// si no hay ninguna promocion vigente devolvemos el codigo con el valor 0
                return codigo;
            }

        }

        return codigo;   //tengo que poner un return en el caso que no haya entrado en ninguna de las opciones devolvera el valor 0     
    }
}
